<?php
/**
 * @author		João Batista Neto
 * @package		rpo
 * @subpackage	cert
 * @category	OpenSSL, certificates
 * @license		http://opensource.org/licenses/gpl-license.php GNU Public License
 */
namespace rpo\cert;

use \ArrayObject;
use \UnexpectedValueException;
use rpo\base\Object;
use rpo\cert\interfaces\IOpenSSLData;

/**
 * Implementação dos dados de configuração
 * @author		João Batista Neto
 * @package		rpo
 * @subpackage	cert
 * @category	OpenSSL, certificates
 * @license		http://opensource.org/licenses/gpl-license.php GNU Public License
 */
class OpenSSLConfig extends Object implements IOpenSSLData {
	/**
	 * @var ArrayObject
	 */
	private $data;

	/**
	 * Constroi um novo objeto de configuração
	 * @uses ArrayObject
	 */
	public function __construct(){
		$this->data = new ArrayObject();
	}

	/**
	 * Método mágico para recuperação de uma propriedade da configuração
	 * @param string $name O nome da propriedade
	 * @return mixed
	 */
	public function __get( $name ){
		$ret = null;

		if ( isset( $this->data[ $name ] ) ){
			$ret = $this->data[ $name ];
		}

		return $ret;
	}

	/**
	 * Método para definição de uma propriedade da configuração
	 * @param string $name O nome da propriedade
	 * @param mixed $value O valor da propriedade
	 * @throws UnexpectedValueException Se for passado um valor que não seja uma string ou um inteiro
	 */
	public function __set( $name , $value ){
		if ( is_string( $value ) || is_int( $value ) ){
			$this->data[ $name ] = $value;
		} else {
			throw new UnexpectedValueException( sprintf( 'Esperamos uma string ou um inteiro, %s foi dado.' , gettype( $value ) ) );
		}
	}

	/**
	 * Recupera uma matriz contendo os dados
	 * @return array
	 * @see IOpenSSLData::getData()
	 */
	public function getData(){
		return $this->data->getArrayCopy();
	}
}